`:top
Eine `!benutzerdefinierte Funktion`! (`F33f`_`[englisch`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Englische_Sprache]`_`f `!user-defined function`!, Abkürzung `!UDF`!) in einer Programmierumgebung bezeichnet eine `F33f`_`[Funktion`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Funktion_(Programmierung)]`_`f, die der Anwender selbst erstellen und in seine Projekte einbinden kann. Sie erfüllt eine Aufgabe wie ein `F33f`_`[Makro`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Makro]`_`f, wird jedoch über einen Funktionsaufruf realisiert. Benutzerdefinierte Funktionen sind in allgemeinen `F33f`_`[Programmiersprachen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmiersprache]`_`f wie `F33f`_`[Visual Objects`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Visual_Objects]`_`f, `F33f`_`[Skriptsprachen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Skriptsprache]`_`f wie `F33f`_`[PHP`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=PHP]`_`f, spezieller Makrosoftware wie `F33f`_`[AutoIt`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=AutoIt]`_`f und in `F33f`_`[Datenbanksprachen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datenbank]`_`f wie `F33f`_`[SQL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f und `F33f`_`[Firebird`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Firebird_(Datenbank)]`_`f verfügbar.
Die `F33f`_`[Syntax`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Syntax]`_`f einer benutzerdefinierten Funktion muss der Syntax der zugrundeliegenden `F33f`_`[Programmiersprache`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmiersprache]`_`f entsprechen, wobei vordefinierte Standardfunktionen und andere benutzerdefinierte Funktionen in der Definition verwendet werden können. Eine benutzerdefinierte Funktion muss genau einen Rückgabewert liefern.
Im Gegensatz zu einer `F33f`_`[gespeicherten Prozedur`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Gespeicherte_Prozedur]`_`f kann eine benutzerdefinierte Funktion nicht als `F33f`_`[Programm`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Computerprogramm]`_`f gestartet werden.
>>Contents
• `F0af`_`[Beispiele`#beispiele]`_`f
• `F0af`_`[Skalare benutzerdefinierte Funktion in SQL`#skalare-benutzerdefinierte-funktion-in-sql]`_`f
• `F0af`_`[External Table Function („externe Tabellenfunktion“) in SQL`#external-table-function-externe-tabellenfunktion-in-sql]`_`f
• `F0af`_`[Weblinks`#weblinks]`_`f
-─
>>Beispiele
>>>Skalare benutzerdefinierte Funktion in SQL
Der folgenden skalaren benutzerdefinierten Funktion wird der `F33f`_`[Fremdschlüssel`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Fremdschlüssel]`_`f `*@PersNr`* der Person vom `F33f`_`[Datentyp`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datentyp]`_`f `F33f`_`[Integer`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Integer_(Datentyp)]`_`f übergeben. Die Funktion gibt die kleinste Vorlesungsnummer für diese Person zurück.
`B100`F9d9CREATE FUNCTION GibMinVorlesungsnummer(@PersNr INT)`f`b
`B100`F9d9RETURNS INT`f`b
`B100`F9d9AS`f`b
`B100`F9d9RETURN`f`b
`B100`F9d9AS`f`b
`B100`F9d9(`f`b
`B100`F9d9 RETURN`f`b
`B100`F9d9 SELECT MIN(VorlNr)`f`b
`B100`F9d9 FROM Vorlesung`f`b
`B100`F9d9 WHERE PersNr = @PersNr`f`b
`B100`F9d9);`f`b
Nachdem diese benutzerdefinierte Funktion in der `F33f`_`[Datenbank`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datenbank]`_`f gespeichert ist, kann sie innerhalb einer `F33f`_`[SQL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f-Abfrage verwendet werden. Die Abfrage
`B100`F9d9SELECT Professor.PersNr, Professor.Name, GibMinVorlesungsnummer(PersNr) AS MinVorlNr,`f`b
`B100`F9d9 (SELECT Titel`f`b
`B100`F9d9 FROM Vorlesung`f`b
`B100`F9d9 WHERE VorlNr = GibMinVorlesungsnummer(PersNr)`f`b
`B100`F9d9 ) AS Titel`f`b
`B100`F9d9FROM Professor;`f`b
könnte folgende `F33f`_`[Tabelle`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datenbanktabelle]`_`f als Ergebnis zurückgeben:
`t
| PersNr | Name | MinVorlNr | Titel |
|---|---|---|---|
| 12 | Wirth | 1000 | Softwareentwicklung 1 |
| 15 | Tesla | 1001 | Datenbanken |
| 20 | Urlauber | 1200 | Netzwerke 1 |
`t
>>>External Table Function („externe Tabellenfunktion“) in SQL
In dieser Variante wird genau eine unbenannte `F33f`_`[SQL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f-Tabelle als Rückgabewert geliefert. Sie kann innerhalb einer SQL-Anweisung überall dort stehen, wo auch eine SQL-Tabelle stehen kann. Auf SQL-Ebene wird ein Kontrolleintrag definiert, der auf ein externes Programm verweist. Das `F33f`_`[Datenbanksystem`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datenbanksystem]`_`f unterstützt in der Regel mehrere `F33f`_`[Programmiersprachen`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Programmiersprache]`_`f, in denen das `F33f`_`[Programm`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Computerprogramm]`_`f geschrieben werden kann.
Die folgende benutzerdefinierte Funktion in `F33f`_`[SQL`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f hat zwei `F33f`_`[Parameter`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Parameter_(Informatik)]`_`f `*@VorlNr`*, `*@PersNr`* vom `F33f`_`[Datentyp`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Datentyp]`_`f `F33f`_`[Integer`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=Integer_(Datentyp)]`_`f:
`B100`F9d9CREATE FUNCTION GibVorlesungen(@VorlNr INT, @PersNr INT)`f`b
`B100`F9d9RETURNS TABLE`f`b
`B100`F9d9AS`f`b
`B100`F9d9RETURN`f`b
`B100`F9d9AS`f`b
`B100`F9d9(`f`b
`B100`F9d9 SELECT Vorlesung.VorlNr, Vorlesung.Titel, Professor.PersNr, Professor.Name`f`b
`B100`F9d9 FROM Professor INNER JOIN Vorlesung`f`b
`B100`F9d9 ON Professor.PersNr = Vorlesung.PersNr`f`b
`B100`F9d9 WHERE VorlNr = @VorlNr AND PersNr = @PersNr`f`b
`B100`F9d9);`f`b
Die Abfrage
`B100`F9d9SELECT * FROM GibVorlesungen(1001, 15);`f`b
könnte folgendes Ergebnis zurückgeben (siehe `F33f`_`[SQL - Sicht`:/page/entry.mu`zim=wikipedia_de_all_nopic_2026-01.zim|entry_path=SQL]`_`f):
`t
| VorlNr | Titel | PersNr | Name |
|---|---|---|---|
| 1001 | Datenbanken | 15 | Urlauber |
`t
>>Weblinks
• Microsoft Docs: Create User-defined Functions (Database Engine)
`c`F0af`_`[↑ Back to top`#top]`_`f`a